package com.jxt.app.service.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.jxt.app.dao.base.ApdialogDAO;
import com.jxt.app.dao.base.ApmessagesDAO;

import com.jxt.app.entity.base.Apdialog;
import com.jxt.app.entity.base.ApdialogExample;
import com.jxt.app.entity.base.Apmessages;
import com.jxt.app.entity.base.ApmessagesExample;
import com.jxt.app.entity.base.Apmsgmember;
import com.jxt.app.service.ApMessageService;
import com.jxt.app.util.MainApnsSend;
import com.jxt.app.util.Page;
import com.jxt.app.vo.ApmessagesVo;

@Service
public class ApMessageServiceImpl implements  ApMessageService{
	@Resource
	private  ApmessagesDAO apmessagesDAO;


	@Resource
	private  ApdialogDAO apdialogDAO;
	@Override
	public int deleteModel(ApmessagesExample record) {
		// TODO Auto-generated method stub
		return apmessagesDAO.deleteByExample(record);
	}

	@Override
	public Page findListByExample(ApmessagesExample inparam, int page, int num)
			throws Exception {
		// TODO Auto-generated method stub
		Page result = new Page();

//		try {
//			/**
//			 * 获取总记录条数
//			 */
//			int rowcount = apmessagesDAO.findCountByExample(inparam);
//			/**
//			 * 当没有符合查询条件的结果集时
//			 */
//			if (rowcount <= 0) {
//				result.setCurPageNum(1);
//				result.setPageCount(1);
//				result.setResult(new ArrayList());
//				result.setRowCount(0);
//				result.setRowCountPerPage(num);
//				return result;
//			}
//			/**
//			 * 总页数
//			 */
//			long pagecount = 0;
//			if (rowcount % num == 0) {
//				pagecount = rowcount / num;
//			} else {
//				pagecount = rowcount / num + 1;
//			}
//			/**
//			 * 根据总页数调整当前页码位置
//			 */
//			if (page <= 1) {
//				page = 1;
//			} else if (page > pagecount) {
//				page = (int) pagecount;
//			}
//
//			Integer start = (page - 1) * num+1;
//			Integer end = page * num;
//
//			/**
//			 * 获取结果集
//			 */
//			HashMap<String, Object> param = new HashMap<String, Object>();
//			param.put("object", inparam);
//			param.put("page", page);
//			param.put("page_begin", start);
//			param.put("page_end", end);
//			List<?> list = apmessagesDAO.findListByExample(param);
//
//			result.setCurPageNum(page);
//			result.setPageCount(pagecount);
//			result.setResult((ArrayList<?>) list);
//			result.setRowCount(rowcount);
//			result.setRowCountPerPage(num);
//
//		} catch (Exception e) {
//			// logger.error(e);
//			throw e;
//		}

		return result;
	}

	@Override
	public Apmessages getModelById(long id) {
		// TODO Auto-generated method stub
		return apmessagesDAO.selectByPrimaryKey((long)id);
	}

	@Override
	public int insertModel(Apmessages record) {
		int ret=0;
		try{
			apmessagesDAO.insert(record);
			ret=1;
		}catch(Exception e){
			e.printStackTrace();
		}
		// TODO Auto-generated method stub
		return ret;
	}

	@Override
	public List<Apmessages> listModel(ApmessagesExample example) {
		// TODO Auto-generated method stub
		return apmessagesDAO.selectByExample(example);
	}

	@Override
	public int updateModel(ApmessagesExample record) {
		// TODO Auto-generated method stub
		return apmessagesDAO.updateByPrimaryKey(record);
	}
	
	/**
	 * 发送消息
	 */
	@Override
	public Apmessages save(Apmessages record,long userid,String sendname,String sendtype) throws SQLException {
		
		ApdialogExample example=new ApdialogExample();//查询会话记录中的发送人和接收人 
		example.setDialogid(record.getDialogid());
		example.setDialogid_Indicator(ApdialogExample.EXAMPLE_EQUALS);
		
		
	  String  receiveID="";
	  String  dialogSendid="";
	  List<Apdialog> apdialogList=apdialogDAO.selectByExample(example);
	  if(null!=apdialogList&&apdialogList.size()>0){
		  String dialogid=apdialogList.get(0).getDialogid();
		  receiveID=apdialogList.get(0).getReceiveid().trim();
		  String sendid=apdialogList.get(0).getSendid();
		  record.setDialogid(dialogid);
		  dialogSendid=sendid;//会话最初发出的人的ID
		  //record.setSendid(Long.parseLong(sendid));//不去会话中取会话发起人ID，而是用客户端提供的人 
	  }else{	  
		
		  
		  return null;
	  }
	  
	  
		
		Long key=apmessagesDAO.insert(record);
		record.setId(key);
		
		long sendid=userid;
		String [] receiveidArray=(receiveID+sendid).split(",");//会话群中所有人包括自己
		List<Apmsgmember> apmsgmemberList=new ArrayList<Apmsgmember>();
		
		
		if(!dialogSendid.equals(String.valueOf(userid))){//是回复消息只需要回复给会话中的主发起人，其他人不可见   
			Apmsgmember apmsgmemberVo=new Apmsgmember();
			String ID=UUID.randomUUID().toString().replace("-", "");
			apmsgmemberVo.setId(ID);
			apmsgmemberVo.setMsgid(key);
			apmsgmemberVo.setSendid(sendid);
			apmsgmemberVo.setIsread((byte)0);
			apmsgmemberVo.setIspush((byte)0);
			apmsgmemberVo.setReceiveid(dialogSendid);//接受者为主发起的那个人
			apmsgmemberVo.setSendname(sendname);
			apmsgmemberVo.setSendtype(sendtype);
			apmsgmemberList.add(apmsgmemberVo);
			
			  
		}else{//主发起人发出消息
			

			for(int i=0;i<receiveidArray.length;i++){
				if(sendid!=Long.parseLong(receiveidArray[i])){//过滤掉自己发给自己的那一条
					Apmsgmember apmsgmemberVo=new Apmsgmember();
					String ID=UUID.randomUUID().toString().replace("-", "");
					apmsgmemberVo.setId(ID);
					apmsgmemberVo.setMsgid(key);
					apmsgmemberVo.setSendid(sendid);
					apmsgmemberVo.setIsread((byte)0);
					apmsgmemberVo.setIspush((byte)0);
					apmsgmemberVo.setReceiveid(receiveidArray[i]);
					apmsgmemberVo.setSendname(sendname);
					apmsgmemberVo.setSendtype(sendtype);
					apmsgmemberList.add(apmsgmemberVo);
				}
			}
			
			
			
		}
		  
		

		
		//apmsgmemberDAO.insertBacth(apmsgmemberList);
		
		MainApnsSend.updateCacheMessage(record, apmsgmemberList);
		
		return record;
		// TODO Auto-generated method stub
		
	}
//	
//	/**
//	 * 查询未读消息 
//	 */
//	@Override
//	public List<ApmessagesVo> queryUnreadMsg(HashMap<String, Object> parms) {
//		// TODO Auto-generated method stub
//		List<ApmessagesVo> mglist=apmessagesDAO.queryUnreadMsg(parms);
//		if(Integer.valueOf(parms.get("isread").toString())==0){
//			Apmsgmember record=new Apmsgmember();
//			record.setIsread((byte)1);
//			record.setIspush((byte)1);
//			record.setReceiveid(parms.get("userid").toString());
//			//apmsgmemberDAO.updateApmsgmemberReadAndPush(record);
//		}
//		return mglist;
//	}
//
//	
//	/**
//	 *更新消息状态
//	 */
//	@Override
//	public int updateMassageList(List<ApmessagesVo> msgList,String receiveid) {
//		// TODO Auto-generated method stub
//			Apmsgmember record=new Apmsgmember();
//			record.setIsread((byte)1);
//			record.setIspush((byte)1);
//			record.setReceiveid(receiveid);
//			apmsgmemberDAO.updateApmsgmemberReadAndPush(record);
//			return 1;
//		
//		
//  }

}
